package managedbean;

import interfaces.GestionarAdministradorR;
import interfaces.GestionarUsuario;


import java.math.BigDecimal;

import java.sql.Date;

import java.sql.Timestamp;

import java.util.ArrayList;
import java.util.Calendar;

import java.util.GregorianCalendar;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import javax.faces.event.ActionEvent;

import javax.faces.event.ValueChangeEvent;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import modelo.Administrador;

import modelo.Users;

import oracle.adf.view.rich.component.rich.RichPopup;

import oracle.adf.view.rich.component.rich.data.RichTable;
import oracle.adf.view.rich.component.rich.input.RichChooseDate;


import oracle.adf.view.rich.component.rich.input.RichInputText;
import oracle.adf.view.rich.component.rich.input.RichSelectOneChoice;

import org.apache.myfaces.trinidad.event.SelectionEvent;
import org.apache.myfaces.trinidad.render.ExtendedRenderKitService;

import org.apache.myfaces.trinidad.util.Service;

import servicelocator.MyServiceLocator;

public class usuario {
    Administrador admin = new Administrador();
    Users usu = new Users();
    GestionarUsuario EJBgestusuario = MyServiceLocator.getGestionarUsuario();
    GestionarAdministradorR EJBgestAdmin = MyServiceLocator.getGestionarAdmin();
    
    private String nombre;
    private String apellidopaterno;
    private String apellidomaterno;
    private String login;
    private String password;
    private BigDecimal rol;
    
    //Ya ponte a trabajar Daniel
    private String rfc;
    private Date fechac;
    private Date ultimac;
    private String pass1=null;
    private String pass2=null;
    private String pass3=null;
    private BigDecimal primeras=null;
    private String loginu;
    private String passwordu;
    private BigDecimal versionc=new BigDecimal(1);
    private Timestamp horas;
    private BigDecimal statusc=new BigDecimal(1);
    private BigDecimal statuss=new BigDecimal(0);
    private Date fechacambiop;
    private Date fechamensajea;
    private Byte sesion=0;
    private RichPopup popup1;
    
    private List<Users> listaUsuarios= new ArrayList<Users>();
    
    private List<Users> listaUsuariosFecha= new ArrayList<Users>();
    private Date fecha1;
    private Date fecha2;
    
    private  List<Users> listaUsuariosDatos = new ArrayList<Users>();
    String paramValor;
    String paramAtributo;
    String nombreAtributo;
    
    private List<Users> listaDatos= new ArrayList<Users>();
    
    private RichSelectOneChoice choice;
    private RichInputText inputText;
    private RichPopup popup2;
    private RichTable tabla;
    private RichInputText rfca;
    private RichInputText logina;
    private RichInputText passworda;


    public usuario() {
        
        super();
        cargarUsuarios();
        muestraOrdenados();
        
        System.out.println("ñññññ ´´´´´´");
    }
    
    public String insertar(){
        admin.setNombre(nombre);
        admin.setApellidopaterno(apellidopaterno);
        admin.setApellidomaterno(apellidomaterno);
        admin.setLogin(login);
        admin.setPassword(password);
        admin.setRol(rol);
        
        EJBgestAdmin.persistAdministrador(admin);
        
        return "exito";
    }
    
    
    public void muestraOrdenados() {
        
        List<Users> listaOrdenados=EJBgestusuario.getUsersFindAll(); 
        
        for(Users muestraUsuariiosBase:listaOrdenados) {
          this.setRfc(muestraUsuariiosBase.getRfce());
          this.setLogin(muestraUsuariiosBase.getLogin());    
          this.setPassword(muestraUsuariiosBase.getPassword());  
          this.setPass1(muestraUsuariiosBase.getPassword_1());
        }
        
        
        
    }
    
    
    /*
     *  // Determinar fecha actual del sistema
            Calendar cal = new GregorianCalendar();
            java.util.Date utilDate = new java.util.Date();
            java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

            primerasession = new BigDecimal(0);

            fechacreacion = sqlDate;
            horasession = new Timestamp(cal.getTime().getTime());
            status = new BigDecimal(1); //representa Cuenta activa
            ultimaconexion = sqlDate;

            //Verificar el manejo de la version comercial por el momento se manejara version gratuita
            versioncomercial = new BigDecimal(0); //representa la version gratuita
     * */

    /**
     * @param e
     */
    public void insertausuario(ActionEvent e){
        
        Calendar cal = new GregorianCalendar();
        java.util.Date utilDate = new java.util.Date();
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        
        fechac=sqlDate;
        
        usu.setRfce(rfc);
        usu.setFechacreacion(fechac);
        usu.setUltimaconexion(ultimac);
        usu.setPassword_1(pass1);
        usu.setPassword_2(pass2);
        usu.setPassword_3(pass3);
        usu.setPrimerasession(primeras);
        usu.setLogin(loginu);
        usu.setPassword(passwordu);
        usu.setVersioncomercial(versionc);
        usu.setHorasession(new Timestamp(cal.getTime().getTime()));
        usu.setStatuscuenta(statusc);
        usu.setStatussession(statuss);
        usu.setFechacambiopassword(fechac);
        usu.setFechamensajeaviso(fechac);
        usu.setSesion(sesion);
        
        EJBgestusuario.persistUsers(usu);

        this.showPopup(e, popup1);
        /*FacesContext.getCurrentInstance().addMessage(uIComponent.getClientId(FacesContext.getCurrentInstance()),
                                                                     new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error"));


        FacesContext ctx = FacesContext.getCurrentInstance();
                HttpServletRequest req = (HttpServletRequest)ctx.getExternalContext().getRequest();
                HttpSession session = req.getSession(true);
                session.setAttribute("receptor", null);*/
        
        
    }
    
    public void cargarUsuarios(){
        listaUsuarios.clear();
        List<Users> nuevalistaU = EJBgestusuario.getUsersFindAll();
        
        for(Users user:nuevalistaU){
            Users u=new Users();
            u.setRfce(user.getRfce());
            u.setLogin(user.getLogin());
            u.setPassword(user.getPassword());
            u.setPassword_1(user.getPassword_1());
            u.setFechacreacion(user.getFechacreacion());
            u.setUltimaconexion(user.getUltimaconexion());
            listaUsuarios.add(u);
        }
         
    }
    
    public void cargarUsuariosFecha(ActionEvent e){
        List<Users> nuevalistaU = EJBgestusuario.getUsersPorfecha(fecha1,fecha2);
        
        for(Users user:nuevalistaU){
            Users u=new Users();
            u.setRfce(user.getRfce());
            listaUsuariosFecha.add(u);
        }
    }
    
    public void cargarUsuariosFechaID(ActionEvent e){
        List<Users> nuevalistaU = EJBgestusuario.getUsersFechaID();
        
        for(Users user:nuevalistaU){
            Users u=new Users();
            u.setRfce(user.getRfce());
            listaUsuariosFecha.add(u);
        }
    }
    String val=null;
    public void cargaDatos(ValueChangeEvent vce){
        
        val= (String) vce.getNewValue();
        System.out.println(val);
        
        if(val.equals("rfci")){
            nombreAtributo="RFC: ";
            this.getInputText().setVisible(true);
            
        }else if(val.equals("login")){
            nombreAtributo="Login: ";
            this.getInputText().setVisible(true);
        }else if(val.equals("password")){
            nombreAtributo="Password: ";
            this.getInputText().setVisible(true);
        }
    }
    
    public void cargarDatos2(ActionEvent e){
        List<Users> nuevalistaU= new ArrayList<Users>();
        //Calendar cal = new GregorianCalendar();
        java.util.Date utilDate = new java.util.Date();
        //java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        listaDatos.clear();
         
        
            if(val.equals("rfci")){
                nuevalistaU.clear();
                nuevalistaU = EJBgestusuario.getUsersBusqueda(paramValor);
                for(Users user:nuevalistaU){
                    Users u=new Users();
                    u.setRfce(user.getRfce());
                    u.setLogin(user.getLogin());
                    u.setPassword(user.getPassword());
                    u.setPassword_1(user.getPassword());
                    u.setFechacreacion(user.getFechacreacion());
                    u.setUltimaconexion(user.getUltimaconexion());
                    listaDatos.add(u);
                    
                    rfc = user.getRfce();
                    loginu = user.getLogin();
                    passwordu = user.getPassword();
                    utilDate = user.getFechacreacion();
                    fechac = new java.sql.Date(utilDate.getTime());
                    utilDate = user.getUltimaconexion();
                    ultimac = new java.sql.Date(utilDate.getTime());
                    
                }
            }else if(val.equals("login")){
                nuevalistaU.clear();
                nuevalistaU = EJBgestusuario.getUsersBusquedaLog(paramValor);
                for(Users user:nuevalistaU){
                    Users u=new Users();
                    u.setRfce(user.getRfce());
                    u.setLogin(user.getLogin());
                    u.setPassword(user.getPassword());
                    u.setPassword_1(user.getPassword());
                    u.setFechacreacion(user.getFechacreacion());
                    u.setUltimaconexion(user.getUltimaconexion());
                    listaDatos.add(u);
                    
                    rfc = user.getRfce();
                    loginu = user.getLogin();
                    passwordu = user.getPassword();
                    utilDate = user.getFechacreacion();
                    fechac = new java.sql.Date(utilDate.getTime());
                    utilDate = user.getUltimaconexion();
                    ultimac = new java.sql.Date(utilDate.getTime());
                }
            }else if(val.equals("password")){
                nuevalistaU.clear();
                nuevalistaU = EJBgestusuario.getUsersBusquedaPass(paramValor);
                for(Users user:nuevalistaU){
                    Users u=new Users();
                    u.setRfce(user.getRfce());
                    u.setLogin(user.getLogin());
                    u.setPassword(user.getPassword());
                    u.setPassword_1(user.getPassword());
                    u.setFechacreacion(user.getFechacreacion());
                    u.setUltimaconexion(user.getUltimaconexion());
                    utilDate = user.getFechacreacion();
                    fechac = new java.sql.Date(utilDate.getTime());
                    utilDate = user.getUltimaconexion();
                    ultimac = new java.sql.Date(utilDate.getTime());
                    listaDatos.add(u);
                    
                    rfc = user.getRfce();
                    loginu = user.getLogin();
                    passwordu = user.getPassword();
                }
                
            }
        //nuevalistaU.clear();
       
    }
    
    public void actualizarusuario(ActionEvent e){
        
        Calendar cal = new GregorianCalendar();
        /*java.util.Date utilDate = new java.util.Date();
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        
        fechac=sqlDate;*/
        
        usu.setRfce(rfc);
        usu.setFechacreacion(fechac);
        usu.setUltimaconexion(cal.getTime());
        usu.setPassword_1(passwordu);
        usu.setPassword_2(pass2);
        usu.setPassword_3(pass3);
        usu.setPrimerasession(primeras);
        usu.setLogin(loginu);
        usu.setPassword(passwordu);
        usu.setVersioncomercial(versionc);
        usu.setHorasession(new Timestamp(cal.getTime().getTime()));
        usu.setStatuscuenta(statusc);
        usu.setStatussession(statuss);
        usu.setFechacambiopassword(fechac);
        usu.setFechamensajeaviso(fechac);
        usu.setSesion(sesion);
        
        EJBgestusuario.mergeUsers(usu);

        this.showPopup(e, popup2);
    }
    
    public void actualizarusuario2(ActionEvent e){
        
        Calendar cal = new GregorianCalendar();
        Users use= new Users();
        java.util.Date utilDate = new java.util.Date();/*
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        
        fechac=sqlDate;*/
        /* utilDate = usu.getFechacreacion();
        fechac = new java.sql.Date(utilDate.getTime());
        utilDate = usu.getUltimaconexion();
        ultimac = new java.sql.Date(utilDate.getTime()); */
        
        use.setRfce((String)rfca.getValue());
        use.setFechacreacion(usu.getFechacreacion());
        use.setUltimaconexion(usu.getUltimaconexion());
        use.setPassword_1(passwordu);
        use.setPassword_2(pass2);
        use.setPassword_3(pass3);
        use.setPrimerasession(primeras);
        use.setLogin((String)logina.getValue());
        use.setPassword((String)passworda.getValue());
        use.setVersioncomercial(versionc);
        use.setHorasession(new Timestamp(cal.getTime().getTime()));
        use.setStatuscuenta(statusc);
        use.setStatussession(statuss);
        use.setFechacambiopassword(fechac);
        use.setFechamensajeaviso(fechac);
        use.setSesion(sesion);
        
        EJBgestusuario.mergeUsers(use);

        this.showPopup(e, popup2);
        
        cargarUsuarios();
    }
    
    
    public void showPopup(ActionEvent event,RichPopup popup1) {
            FacesContext context = FacesContext.getCurrentInstance();
            UIComponent source = (UIComponent)event.getSource();
            String alignId = source.getClientId(context);
            RichPopup.PopupHints hints = new RichPopup.PopupHints();
            popup1.show(hints);
        }
      
        
        public void cerrarPopUp(RichPopup popup) {
            FacesContext fctx = FacesContext.getCurrentInstance();
            UIComponent component = fctx.getViewRoot().findComponent(popup.getClientId());
            ExtendedRenderKitService service = Service.getRenderKitService(fctx, ExtendedRenderKitService.class);
            StringBuffer strbuffer = new StringBuffer();
            strbuffer.append("popup=AdfPage.PAGE.findComponent('");
            strbuffer.append(component.getClientId(fctx));
            strbuffer.append("');popup.hide();");
            service.addScript(fctx, strbuffer.toString());
        }
        
    public void showPopup2(ActionEvent event,RichPopup popup2) {
            FacesContext context = FacesContext.getCurrentInstance();
            UIComponent source = (UIComponent)event.getSource();
            String alignId = source.getClientId(context);
            RichPopup.PopupHints hints = new RichPopup.PopupHints();
            popup2.show(hints);
        }
      
        

    public void setAdmin(Administrador admin) {
        this.admin = admin;
    }

    public Administrador getAdmin() {
        return admin;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getNombre() {
        return nombre;
    }

    public void setApellidopaterno(String apellidopaterno) {
        this.apellidopaterno = apellidopaterno;
    }

    public String getApellidopaterno() {
        return apellidopaterno;
    }

    public void setApellidomaterno(String apellidomaterno) {
        this.apellidomaterno = apellidomaterno;
    }

    public String getApellidomaterno() {
        return apellidomaterno;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getLogin() {
        return login;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public void setRol(BigDecimal rol) {
        this.rol = rol;
    }

    public BigDecimal getRol() {
        return rol;
    }



    public void setPopup1(RichPopup popup1) {
        this.popup1 = popup1;
    }

    public RichPopup getPopup1() {
        return popup1;
    }

    public void setRfc(String rfc) {
        this.rfc = rfc;
    }

    public String getRfc() {
        return rfc;
    }

    public void setFechac(Date fechac) {
        this.fechac = fechac;
    }

    public Date getFechac() {
        return fechac;
    }

    public void setUltimac(Date ultimac) {
        this.ultimac = ultimac;
    }

    public Date getUltimac() {
        return ultimac;
    }

    public void setPass1(String pass1) {
        this.pass1 = pass1;
    }

    public String getPass1() {
        return pass1;
    }

    public void setPass2(String pass2) {
        this.pass2 = pass2;
    }

    public String getPass2() {
        return pass2;
    }

    public void setPass3(String pass3) {
        this.pass3 = pass3;
    }

    public String getPass3() {
        return pass3;
    }

    public void setPrimeras(BigDecimal primeras) {
        this.primeras = primeras;
    }

    public BigDecimal getPrimeras() {
        return primeras;
    }

    public void setLoginu(String loginu) {
        this.loginu = loginu;
    }

    public String getLoginu() {
        return loginu;
    }

    public void setPasswordu(String passwordu) {
        this.passwordu = passwordu;
    }

    public String getPasswordu() {
        return passwordu;
    }

    public void setVersionc(BigDecimal versionc) {
        this.versionc = versionc;
    }

    public BigDecimal getVersionc() {
        return versionc;
    }

    public void setHoras(Timestamp horas) {
        this.horas = horas;
    }

    public Timestamp getHoras() {
        return horas;
    }

    public void setStatusc(BigDecimal statusc) {
        this.statusc = statusc;
    }

    public BigDecimal getStatusc() {
        return statusc;
    }

    public void setStatuss(BigDecimal statuss) {
        this.statuss = statuss;
    }

    public BigDecimal getStatuss() {
        return statuss;
    }

    public void setFechacambiop(Date fechacambiop) {
        this.fechacambiop = fechacambiop;
    }

    public Date getFechacambiop() {
        return fechacambiop;
    }

    public void setFechamensajea(Date fechamensajea) {
        this.fechamensajea = fechamensajea;
    }

    public Date getFechamensajea() {
        return fechamensajea;
    }

    public void setSesion(Byte sesion) {
        this.sesion = sesion;
    }

    public Byte getSesion() {
        return sesion;
    }

    public void setListaUsuarios(List<Users> listaUsuarios) {
        this.listaUsuarios = listaUsuarios;
    }

    public List<Users> getListaUsuarios() {
        return listaUsuarios;
    }

    public void setFecha1(Date fecha1) {
        this.fecha1 = fecha1;
    }

    public Date getFecha1() {
        return fecha1;
    }

    public void setFecha2(Date fecha2) {
        this.fecha2 = fecha2;
    }

    public Date getFecha2() {
        return fecha2;
    }

    public void setListaUsuariosFecha(List<Users> listaUsuariosFecha) {
        this.listaUsuariosFecha = listaUsuariosFecha;
    }

    public List<Users> getListaUsuariosFecha() {
        return listaUsuariosFecha;
    }

    public void setListaUsuariosDatos(List<Users> listaUsuariosDatos) {
        this.listaUsuariosDatos = listaUsuariosDatos;
    }

    public List<Users> getListaUsuariosDatos() {
        return listaUsuariosDatos;
    }

    public void setParamValor(String paramValor) {
        this.paramValor = paramValor;
    }

    public String getParamValor() {
        return paramValor;
    }

    public void setParamAtributo(String paramAtributo) {
        this.paramAtributo = paramAtributo;
    }

    public String getParamAtributo() {
        return paramAtributo;
    }

    public void setChoice(RichSelectOneChoice choice) {
        this.choice = choice;
    }

    public RichSelectOneChoice getChoice() {
        return choice;
    }

    public void setInputText(RichInputText inputText) {
        this.inputText = inputText;
    }

    public RichInputText getInputText() {
        return inputText;
    }

    public void setNombreAtributo(String nombreAtributo) {
        this.nombreAtributo = nombreAtributo;
    }

    public String getNombreAtributo() {
        return nombreAtributo;
    }

    public void setPopup2(RichPopup popup2) {
        this.popup2 = popup2;
    }

    public RichPopup getPopup2() {
        return popup2;
    }

    public void setListaDatos(List<Users> listaDatos) {
        this.listaDatos = listaDatos;
    }

    public List<Users> getListaDatos() {
        return listaDatos;
    }
   
    public void tablaselect(SelectionEvent selectionEvent) {
        // Add event code here...
        usu = (Users)tabla.getSelectedRowData();
        
        rfca.setValue(usu.getRfce());
        logina.setValue(usu.getLogin());
        passworda.setValue(usu.getPassword());
        
        
        
        //System.out.println(usu.getHorasession().toString());
    }

    public void setTabla(RichTable tabla) {
        this.tabla = tabla;
    }

    public RichTable getTabla() {
        return tabla;
    }

    public void setRfca(RichInputText rfca) {
        this.rfca = rfca;
    }

    public RichInputText getRfca() {
        return rfca;
    }

    public void setLogina(RichInputText logina) {
        this.logina = logina;
    }

    public RichInputText getLogina() {
        return logina;
    }

    public void setPassworda(RichInputText passworda) {
        this.passworda = passworda;
    }

    public RichInputText getPassworda() {
        return passworda;
    }
}
